package com.example.userdemo.util;

import com.example.userdemo.enums.EnumVO;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description 枚举类相关工具(需保证有code,desc属性以及getCode,getDesc方法)
 * @Author liqinglin
 * @Date 2023/11/24 17:12
 */
@Data
@Slf4j
public class EnumUtil {
    /**
     * 获取枚举类对应的枚举列表
     * @param enumObject 待获取枚举类的一个枚举
     * @return
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     */
    public static List<EnumVO> getEnums(Enum<?> enumObject) {
        Class<? extends Enum> aClass = enumObject.getClass();
        Enum[] enums = aClass.getEnumConstants();
        List<EnumVO> voList = new ArrayList<>();
        try {
            for (Enum item : enums){
                String code = aClass.getMethod("getCode").invoke(item).toString();
                String desc = aClass.getMethod("getDesc").invoke(item).toString();
                EnumVO enumVO = new EnumVO(code, desc);
                voList.add(enumVO);
            }
        }catch (Exception e){
            log.error("通过反射获取枚举值列表失败");
            throw new RuntimeException("通过反射获取枚举值列表失败:"  + e.getMessage());
        }
        return voList;
    }
}
